<!DOCTYPE html>
<html lang="zh-CN">
    <head>
        <meta charset="UTF-8" />
        <title>05_闭包-基本使用</title>
    </head>
    <body>
        <script>
            // (1)函数如果没有加（）  那么是函数体 ，如果函数想执行 那么就要在函数体的
            // 后面加上（）；

            // function f1(){
            //     console.log(11111);
            // }
            // var a = f1;
            // a();
            // f1();

            // (2)作用域链：在当前作用域下找不到那个变量  那么就会到上一层的作用域去找

            // (3)函数的返回值



            // 解释：f2利用与作用域链的知识点  来访问到了f1中的变量a
            function f1(){
                var a = 1;
                function f2(){
                    return a;
                }
                return f2;
            }

            // result是调用了f1之后获得到的f2的函数体
            var result = f1();

            var xxx = result();

            console.log(xxx);

            // 闭包的产生条件
            // （1）在外部函数f1内 定义一个内部函数f2
            // （2）内部函数f2要引用外部函数f1的局部变量a
            // （3）外部函数返回内部函数的函数体
            // （4）内部函数和外部函数都要执行


        </script>
    </body>
</html>